package per.dg.basicuseasynctak

import android.os.AsyncTask
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    lateinit var tv : Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        tv = findViewById(R.id.bt_start_task)



    }

    class AsyncTaskDownload(tv : Button) : AsyncTask<Int, String, Boolean>(){

        private val TAG = "AsyncTaskDownload"

        var tv : TextView = tv

        /**
         * 执行异步任务前的准备工作
         * 例如：页面进入加载状态。。。
         */
        override fun onPreExecute() {
            super.onPreExecute()
            tv.isEnabled = false
            tv.setText("下载任务开始")
        }

        override fun doInBackground(vararg params: Int?): Boolean {

            for(int in params.iterator()){
                Log.e(TAG, "doInBackground: 接收到数据 $int")
            }

            try {
                Thread.sleep(1000)
                publishProgress("过了一秒")
                Thread.sleep(1000)
                publishProgress("又过了一秒")
                Thread.sleep(1000)
                publishProgress("共过了三秒")
                Thread.sleep(1000)
                Log.e(TAG, "doInBackground: ${Thread.currentThread().name}" )
//                tv.setText("测试是否可以修改UI")
                return true
            }catch (e : InterruptedException){
                return false
            }
        }

        /**
         * 告知异步任务的进度
         * 根据进度通知界面展示
         * 例如：更新进度条。。。
         */
        override fun onProgressUpdate(vararg values: String?) {
            super.onProgressUpdate(*values)
            var string = ""
            for (str in values.iterator()){
                string = string + str
            }
            tv.text = string
            Log.e(TAG, "onProgressUpdate: ${Thread.currentThread().name}" )
        }

        /**
         * 异步任务结束，返回结果
         * 通过返回结果对界面进行处理
         * 例如：展示数据。。。
         */
        override fun onPostExecute(result: Boolean?) {
            super.onPostExecute(result)
            tv.isEnabled = true
            if(result!!){
                tv.setText("下载任务结束")
            }
        }

        /**
         * 异步任务取消
         */
        override fun onCancelled() {
            super.onCancelled()
            tv.isEnabled = true
            tv.setText("下载任务取消")
        }

    }

    lateinit var asyncDownload : AsyncTaskDownload

    fun onClick(view: View) {
        when(view.id){
            R.id.bt_start_task->{
                asyncDownload = AsyncTaskDownload(tv)
                asyncDownload.execute(5, 7)
            }
            R.id.bt_cancel_task->{
                asyncDownload.cancel(true)
            }
        }

    }
}